// 游戏配置（可调节）

const GAME_WIDTH = 600;   // 游戏宽度
const GAME_HEIGHT = 450;  // 游戏高度
const PLAYER_SPEED = 10;  // 玩家移动速度（像素/按键）
const METEOR_SPEED = 5;   // 陨石移动速度（像素/帧）
const METEOR_INTERVAL = 1000; // 陨石生成间隔（毫秒）
const SCORE_SPEED = 1000; // 得分增长间隔（毫秒）

// 全局状态
 
let playerX = 50;         // 玩家X坐标
let playerY = 210;        // 玩家Y坐标
let score = 0;            // 得分
let isPlaying = false;    // 游戏是否启动
let meteorInterval = null;// 陨石生成定时器
let scoreInterval = null; // 得分定时器
let meteors = [];         // 陨石数组

// 初始化游戏（点击开始后执行）

function startGame() {
  // 1. 显示游戏区域，隐藏开始界面
  document.getElementById('start-screen').style.display = 'none';
  document.getElementById('game-area').style.display = 'block';
  
  // 2. 绑定键盘事件（控制玩家）
  document.addEventListener('keydown', movePlayer);
  
  // 3. 启动陨石生成和得分逻辑
  spawnMeteors();
  updateScore();
  
  // 4. 标记游戏状态
  isPlaying = true;
}

// 玩家移动（方向键控制）
 
function movePlayer(e) {
  if (!isPlaying) return; // 游戏未启动时不响应
  
  switch (e.key) {
    case 'ArrowUp':    // 上
      playerY = Math.max(0, playerY - PLAYER_SPEED);
      break;
    case 'ArrowDown':  // 下
      playerY = Math.min(GAME_HEIGHT - 30, playerY + PLAYER_SPEED);
      break;
    case 'ArrowLeft':  // 左
      playerX = Math.max(0, playerX - PLAYER_SPEED);
      break;
    case 'ArrowRight': // 右
      playerX = Math.min(GAME_WIDTH - 30, playerX + PLAYER_SPEED);
      break;
  }
  
  // 更新玩家位置
  document.getElementById('player').style.cssText = `
    left: ${playerX}px;
    top: ${playerY}px;
  `;
}

// 生成陨石（定时生成，从右侧移动）
 
function spawnMeteors() {
  meteorInterval = setInterval(() => {
    // 创建陨石元素
    const meteor = document.createElement('div');
    meteor.className = 'meteor';
    
    // 随机垂直位置（避免超出边界）
    const randomY = Math.floor(Math.random() * (GAME_HEIGHT - 20));
    meteor.style.top = randomY + 'px';
    
    // 添加到页面
    document.getElementById('meteors').appendChild(meteor);
    meteors.push(meteor);
    
    // 陨石移动（独立定时器，避免干扰）
    const moveTimer = setInterval(() => {
      let left = parseInt(meteor.style.left) || GAME_WIDTH;
      left -= METEOR_SPEED;
      meteor.style.left = left + 'px';
      
      // 超出左边界 → 销毁陨石
      if (left < -20) {
        clearInterval(moveTimer);
        meteor.remove();
        meteors = meteors.filter(m => m !== meteor);
      }
    }, 30);
  }, METEOR_INTERVAL);
}

// 得分更新（每秒+1）

function updateScore() {
  scoreInterval = setInterval(() => {
    score++;
    document.getElementById('score').textContent = `得分：${score}`;
  }, SCORE_SPEED);
}

// 碰撞检测（每50毫秒检查一次）
 
setInterval(() => {
  if (!isPlaying) return;
  
  meteors.forEach(meteor => {
    const meteorRect = meteor.getBoundingClientRect();
    const playerRect = document.getElementById('player').getBoundingClientRect();
    
    // 简单碰撞判断：矩形重叠
    if (
      playerRect.left < meteorRect.right &&
      playerRect.right > meteorRect.left &&
      playerRect.top < meteorRect.bottom &&
      playerRect.bottom > meteorRect.top
    ) {
      gameOver(); // 碰撞→游戏结束
    }
  });
}, 50);

// 游戏结束流程
 
function gameOver() {
  // 停止所有定时器
  clearInterval(meteorInterval);
  clearInterval(scoreInterval);
  
  // 隐藏游戏区域，显示结束界面
  document.getElementById('game-area').style.display = 'none';
  document.getElementById('end-screen').style.display = 'flex';
  document.getElementById('final-score').textContent = `最终得分：${score}`;
  
  // 重玩按钮绑定
  document.getElementById('restart-btn').addEventListener('click', () => {
    location.reload(); // 刷新页面重启
  });
  
  // 标记游戏状态
  isPlaying = false;
}

// 页面加载后：绑定开始按钮
 
window.onload = () => {
  document.getElementById('start-btn').addEventListener('click', startGame);
};